﻿namespace maranov.SymlinkManager.FilesystemLinks
{
    /// <summary>
    /// Filesystem link.
    /// </summary>
    public interface ILink
    {
        /// <summary>
        /// Link target name in a filesystem.
        /// </summary>
        ILocation Target
        {
            get;
        }

        /// <summary>
        /// Link name in a filesystem.
        /// </summary>
        ILocation Name
        {
            get;
        }

        /// <summary>
        /// Determines whether link exists in its location.
        /// </summary>
        bool Exists
        {
            get;
        }

        /// <summary>
        /// Link's and target's state in the filesystem.
        /// </summary>
        LinkState State
        {
            get;
        }

        /// <summary>
        /// Determines whether parameters 
        /// </summary>
        bool IsValid
        {
            get;
        }

        /// <summary>
        /// Creates symlink in its location.
        /// </summary>
        void Create();

        /// <summary>
        /// Removes symlink in its location.
        /// </summary>
        void Remove(bool force = false);
    }
}
